package cube.data.util;

/**
 * 随机不重复数生成器
 * 
 * @author abiao
 */
public class Random {

	/**
	 * 初始化数据
	 */
	private int[] nums;
	private int end;
	private int begin;

	/**
	 * 随机不重复数生成器
	 */
	public Random(int begin, int end) {
		this.begin = begin;
		this.end = end;
		initData();
	}

	/**
	 * 初始化数据
	 */
	private void initData() {
		nums = new int[end - begin];
		for (int i = 0; i < nums.length; i++) {
			nums[i] = begin + i;
		}
	}

	/**
	 * 获取下一个随机数
	 */
	public int next() {
		int p = DataUtil.random(0, end-- - begin);
		DataUtil.swap(nums, p, end - begin);
		return nums[end - begin];
	}

	/**
	 * 是否有下一个随机数
	 */
	public boolean hasNext() {
		return end > begin;
	}

	/**
	 * 获取全部随机数
	 */
	public int[] getRandData() {
		while (hasNext()) {
			next();
		}
		return nums;
	}
}
